package com.example.service;

import com.example.gateway.MqttGateway;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * mqtt消息发送
 *
 * @author ysb
 * @version V1.0
 * @Date 2024/11/12
 **/
@Component
public class MqttMessageSender {

    @Resource
    private MqttGateway mqttGateway;

    public void sendMessage(String topic, String msg) {
        mqttGateway.sendToMqtt(topic, msg);
    }

    /**
     * 发送消息
     *
     * @param topic topic
     * @param qos   服务质量
     *              1. QoS 0（最多一次交付）
     *              行为：消息会被立即发送给当前订阅的客户端。如果没有任何客户端订阅该主题，消息将被丢弃。
     *              特点：不可靠，消息可能丢失，但不会重复。
     *              <p>
     *              2. QoS 1（至少一次交付）
     *              行为：消息会被存储在 Broker 上，直到至少有一个客户端订阅该主题并成功接收到消息。如果没有任何客户端订阅该主题，消息将被暂时存储在 Broker 上，直到有客户端订阅。
     *              特点：可靠，消息不会丢失，但可能会重复。
     *              <p>
     *              3. QoS 2（恰好一次交付）
     *              行为：消息会被存储在 Broker 上，直到至少有一个客户端订阅该主题并成功接收到消息。如果没有任何客户端订阅该主题，消息将被暂时存储在 Broker 上，直到有客户端订阅。
     *              特点：最可靠，消息不会丢失，也不会重复。
     *              QoS 越大，消息的传输复杂程度也越高，我们需要根据实际场景来选择合适的 QoS。
     * @param msg   msg
     */
    public void sendMessage(String topic, int qos, String msg) {
        mqttGateway.sendToMqtt(topic, qos, msg);
    }
}
